package com.igeek.boot.entity;

import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.Map;

/**
 * @Author fengqq
 * @Description TODO
 * @Date 2024/8/22  9:54
 */
@Data
//@TableName 用来标识 关联的表名
@TableName("user")
@ApiModel("用户信息")
public class User {
    /**
     主键自动生成策略：
     AUTO(0), 自增长 数据库中必须设置主键自动auto_increment
     NONE(1), 不填写
     INPUT(2),自己填写 自定义id的值
     ASSIGN_ID(3),默认 雪花算法  包含数字 1826511482812022786  数据库中必须设置主键是bigint
     ASSIGN_UUID(4), UUID  包含字母和数字020531fdcd125ce0e427c7d033983223  数据库中必须设置主键是varchar
     */
    //@TableId 用来表示 主键字段
    @TableId(value = "user_id",type = IdType.ASSIGN_ID)
    @ApiModelProperty("用户编号")
    private Long id;

    //@TableField 用来表示 普通字段
    @TableField("name")
    @ApiModelProperty("用户姓名")
    private String name;

    @TableField("age")
    @ApiModelProperty("用户年龄")
    private Integer age;

    @TableField("email")
    @ApiModelProperty("用户邮箱")
    private String email;

    //逻辑删除
    //逻辑删除的原理1：UPDATE user SET is_delete=1 WHERE user_id=? AND is_delete=0
    //逻辑删除的原理2：SELECT user_id AS id,name,age,email,is_delete FROM user WHERE is_delete=0
    @TableLogic
    @TableField("is_delete")
    @ApiModelProperty("是否删除 0未删除 1已删除")
    private Integer isDelete;

    //创建时间  插入数据时实现该字段自动填充
    @TableField(value = "create_time",fill = FieldFill.INSERT)
    @ApiModelProperty("创建时间")
    private LocalDateTime createTime;

    //更新时间  插入或者更新数据时实现该字段自动填充
    @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
    @ApiModelProperty("更新时间")
    private LocalDateTime updateTime;

    //乐观锁
    @Version
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty("版本号")
    private Integer version;

    //单独定义 表中没有的字段 但是前端要显示的信息
    @TableField(exist = false)
    @ApiModelProperty("其他属性")
    private Map<String,Object> params;
}
